package com.zp.self.module.level_4_算法练习.算法.深度优先搜索.递归;

import com.zp.self.module.level_4_算法练习.算法.广度优先搜索.Node;

import java.util.ArrayList;
import java.util.List;

/**
 * @author By ZengPeng
 */
public class 力扣_590_N叉树的后序遍历 {
    //测试
    public static void main(String[] args) {

        System.out.println(new 力扣_590_N叉树的后序遍历().postorder(Node.initNode()));
    }

    /**
    题目：给定一个 n 叉树的根节点 root ，返回 其节点值的 后序遍历 。
     n 叉树 在输入中按层序遍历进行序列化表示，每组子节点由空值 null 分隔（请参见示例）。

     示例 1：
     输入：root = [1,null,3,2,4,null,5,6]
     输出：[5,6,3,2,4,1]

     示例 2：
     输入：root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]
     输出：[2,6,14,11,7,3,12,8,4,13,9,10,5,1]

     分析：【P 💗】
       1.深度优先遍历: 先遍历当前节点的子孙,继续遍历当前节点
        --执行用时：0 ms, 在所有 Java 提交中击败了100.00%的用户

    边界值 & 注意点：
       1.
     **/
    public List<Integer> postorder(Node root) {
        List<Integer> res= new ArrayList<>();
        dfs(root,res);
        return res;
    }

    private void dfs(Node root, List<Integer> res) {
        if(root==null) return;
        if(root.children!=null){
            for (Node node : root.children)
                dfs(node,res);
        }
        res.add(root.val);
    }
}
